// 创建自定义验证类: CustomTextLength(自定义文本长度)
import {
  ValidatorConstraint,
  ValidatorConstraintInterface,
  ValidationArguments
} from 'class-validator'

/* @ValidatorConstraint(验证约束)：装饰器，用于标记这个类为自定义验证器。里面放置对象，对象参数 name：指定验证器的名称  async：是否异步验证
ValidatorConstraintInterface(验证器约束接口)：用来定义验证器约束的接口，它允许开发人员创建自定义的验证规则
ValidationArguments：验证参数，传递自定义验证器的方法参数
validate 方法：validate(验证的值:类型,validationArguments：验证相关的参数（可选）)：是对 验证的值 进行验证，返回一个布尔值（同步）或者 Promise<boolean>（异步
defaultMessage 方法：返回默认的错误消息字符串，在验证失败时会显示该消息。validationArguments 参数是验证相关的参数（可选）
*/

@ValidatorConstraint({ name: 'customText', async: false })
export class CustomTextLength implements ValidatorConstraintInterface {
  validate(text: string, ages?: ValidationArguments): Promise<boolean> | boolean {
    // 在这里实现验证逻辑
    return text.length >= ages?.constraints[0] && text.length <= ages?.constraints[1]
  }
  defaultMessage(ages?: ValidationArguments): string {
    // 在这里返回验证失败时的默认错误消息
    return '不符合该字段的长度要求'
  }
}
